package com.lib76.buildCode.service;

import com.lib76.buildCode.model.Menu;
import com.lib76.buildCode.model.PageConfig;
import com.lib76.buildCode.model.PageEntity;
import com.lib76.buildCode.model.PageEntityField;
import com.lib76.buildCode.model.Project;
import com.lib76.buildCode.model.TableEntity;
import com.lib76.buildCode.model.TableFieldEntity;

/**
 * 页面配置服务
 * @author 张浩
 * @version 0.0.4
 */
public class PageConfigServer {

	/**
	 * 向项目添加数据库表转换的页面
	 * @param proejct
	 * @param table
	 * @return
	 */
	public static void addByTable(PageConfig config,TableEntity table){
		PageEntity pageEntity = tableToPage(table);
		Menu menu = MenuConfigServer.pageToMenu(pageEntity);
		MenuConfigServer.saveMenu(config.getMenuConfig(), menu);
		config.getEntitys().put(pageEntity.getEntityClassName(), pageEntity);
	}
	
	/**
	 * 数据库表转换页面
	 * @param table
	 * @return
	 */
	public static PageEntity tableToPage(TableEntity table){
		PageEntity pageEntity = new PageEntity();
		pageEntity.setEntityClassName(table.getClassName());
		pageEntity.setEntityChinaName(table.getTableChinaName());
		for(TableFieldEntity field:table.getFields().values()){
			PageEntityField pageEntityField = tableFieldToPageField(field);
			pageEntity.getFields().put(pageEntityField.getCode(), pageEntityField);
		}
		return pageEntity;
	}
	
	/**
	 * 数据库表字段转换页面字段
	 * @param proejct
	 * @param field
	 * @return
	 */
	public static PageEntityField tableFieldToPageField(TableFieldEntity field){
		PageEntityField entityField = new PageEntityField();
		entityField.setCode(field.getCode());
		entityField.setName(field.getName());
		if(field.getLength() != null){
			if(field.getLength()>=300){
				entityField.setIsDisplayTable(false);
			}
			if(field.getLength()>=500){
				entityField.setInputType("textarea");
			}
		}
		if("Date".equals(field.getType())){
			entityField.setInputType("date");
		}else if("Boolean".equals(field.getType())){
			entityField.setInputType("checkbox");
		}
		if(field.getIsKey()){
			entityField.setInputType("hidden");
		}
		return entityField;
	}
}
